"""
4. 切片的使用

题目：编写一个Python程序，随机生成20个由大小写字母、数字和下划线组成的字符组，并使用字符串、列表、集合和元组的方法打印出来。
对字符串和列表切片，用两种方式取出4-14位的字符。
提示：
    1. 使用random.randint()函数生成随机整数。
    2. 使用random.choice()函数从字符组中随机选择一个字符。
    3. 字符串切片：str[start:end]，列表切片：list[start:end]。
"""

import random

# 随机生成20个字符（请补充完整代码）
import random
import string

# 生成随机字符组的函数
def generate_random_strings():
    random_strings = []
    characters = string.ascii_letters + string.digits + '_'
    for _ in range(20):
        length = random.randint(1, 32)
        random_string = ''.join(random.choice(characters) for _ in range(length))
        random_strings.append(random_string)
    return random_strings

# 生成20个随机字符组
random_strings_list = generate_random_strings()

### 使用字符串方法打印
print("使用字符串方法打印:")
for random_string in random_strings_list:
    print(random_string)

### 使用列表方法打印
print("\n使用列表方法打印:")
print(random_strings_list)

### 使用集合方法打印
print("\n使用集合方法打印:")
random_strings_set = set(random_strings_list)
for random_string in random_strings_set:
    print(random_string)

### 使用元组方法打印
print("\n使用元组方法打印:")
random_strings_tuple = tuple(random_strings_list)
for random_string in random_strings_tuple:
    print(random_string)

### 对字符串切片取出4-14位的字符
print("\n对字符串切片取出4-14位的字符:")
for random_string in random_strings_list:
    if len(random_string) >= 14:
        print(random_string[4:14])
    else:
        print(random_string[4:])

### 对列表切片取出4-14位的字符
print("\n对列表切片取出4-14位的字符:")
for random_string in random_strings_list:
    random_list = list(random_string)
    if len(random_list) >= 14:
        print(''.join(random_list[4:14]))
    else:
        print(''.join(random_list[4:]))

